Java基础知识(三)

接口

  1. 接口用来描述类具有什么功能,而并不给出每个功能的具体实现。
  2. 接口中的所有方法自动地属于public,所以在接口中声明方法的时候,不必提供关键字public。而在实现接口的时候,必须将方法声明为public。
  3. 接口绝对不能含有实例域,也不能在接口中实现方法。
  4. 任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。
  5. 不能构造接口的对象(x = new Comparable(…) //ERROR),但是可以声明接口的变量(Comparable x; //OK);接口变量必须引用实现了接口的类对象。
  6. 接口中虽然不能包含实例域与或者静态方法,但却可以包含常量,与接口中的方法都自动地被设置为public一样,接口中的域将被自动设为public static final
  7. 尽管每个类只能拥有一个超类,但是却可以实现多个接口,使用逗号将实现的各个接口分隔开。
  8. 之所以同时存在接口与抽象类,是因为7所述。同时,Java不支持多继承,接口可以提供多重继承的大多数好处。

对象克隆

  1. 到拷贝一个变量时,原始变量与拷贝变量引用同一个对象。

  2. 假如想创建一个对象的copy,且最初状态与original一样,而以后也可以各自改变状态的话,就需要使用clone方法

  3. clone方法是Object类的一个protected方法。

  4. 若原始对象与浅克隆对象共享的子对象是不可变的,浅拷贝不会产生任何问题。(如:子对象属于String类这种不允许改变的类)同时,假如子对象在生命周期内不发生变化也没问题。

  5. 即使clone的默认实现(浅拷贝)能够满足需求,也应该实现Cloneable接口,将clone重定义为public,并调用super.clone();

    例:

    1
    2
    3
    4
    5
    6
    7
    class Employee implements Cloneable
    {
    public Employee clone() throws CloneNotSupportedException
    {
    return (Employee)super.clone();
    }
    }